package com.cnap.multiclouldmgmt.repository.master;

import com.cnap.multiclouldmgmt.model.vm.VmCreateModel;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author dyq
 * vm 创建的信息保存
 */
@Mapper
public interface VmCreateInfoMapper {

    /**
     * 保存需要创建虚拟机的事件
     * @param vmCreateModel 创建事件的情况
     */
    void saveVmCreateRecord(VmCreateModel vmCreateModel);

    /**
     * 获取所有没结束的信息
     * @return
     */
    List<VmCreateModel> getAllCreateInfo();

    /**
     * 删除记录
     * @param svcId
     */
    void delRecord(@Param("svcId")String svcId);

    /**
     * 更新步骤
     * @param svcId
     * @param type
     */
    void updateType(@Param("svcId")String svcId, @Param("type")String type);

    /**
     * 获取信息
     * @param svcId
     * @return
     */
    VmCreateModel getCreateInfoBySvcId(@Param("svcId")String svcId);

    /**
     * 更新创建信息
     * @param vmCreateModel
     */
    void updateVmCreateInfo(VmCreateModel vmCreateModel);

    /**
     * 结束
     * @param svcId
     * @param newSvcId
     * @param type
     */
    void endVmCreateInfo(@Param("svcId")String svcId, @Param("newSvcId")String newSvcId,
                         @Param("newAppId")String newAppId, @Param("type")String type);

    /**
     * 更新请求参数
     * @param svcId
     * @param createParam
     */
    void updateVmCreateParam(@Param("svcId")String svcId, @Param("createParam")String createParam);

    String getErrorMsg(@Param("svcId")String svcId);

    void updateVmWaitAppId(@Param("svcId")String svcId, @Param("waitSvcId")String waitSvcId);

    List<VmCreateModel> getAllCreateInfoWait0();

    void updateWaitCreateInfo0(@Param("svcId")String svcId);

    List<VmCreateModel> getCreateInfoLikeSvcIdNoEnd(@Param("svcId")String svcId);

    List<VmCreateModel> getCreateInfoLikeSvcId(@Param("svcId")String svcId);

    VmCreateModel getVmCreateModelByCloudeTypeRegionZoneArchAccountNoEndNoError(
            @Param("cloudType")String cloudType,@Param("regionId")String regionId,@Param("zoneId")String zoneId,@Param("arch")String arch,
            @Param("accountName")String accountName);
}
